extern crate r2d2;

use std::{thread,env};
use ibm_db::{ODBCConnectionManager,Statement,ResultSetState::Data};

fn main() {
    let manager = ODBCConnectionManager::new(
	  format!("DATABASE={};HOSTNAME={};PORT={};UID={};PWD={};"
	  ,env::var("DATABASE").unwrap()
	  ,env::var("HOSTNAME").unwrap()
	  ,env::var("PORT").unwrap()
	  ,env::var("UID").unwrap()
	  ,env::var("DBPWD").unwrap()
	  )
	  
	  );
    let pool = r2d2::Pool::new(manager).unwrap();

    let mut children = vec![];
    for i in 0..10i32 {
        let pool = pool.clone();
        let pool_conn = pool.get().unwrap();
        children.push(thread::spawn(move || {
            let conn = pool_conn.raw();
            let stmt = Statement::with_parent(&conn).unwrap();
            if let Data(mut stmt) = stmt.exec_direct("select groupid ,groupname from WF_GROUP").unwrap() {
                while let Some(mut cursor) = stmt.fetch().unwrap() {
                    if let Some(val2) = cursor.get_data::<String>(2).unwrap() {
                         println!("THREAD {} {}  ",i,val2 );
                    }
                }
            }
        }));
    }

    for child in children {
        let _ = child.join();
    }
}